package pruabas_tpalgo3;

/**
 * Motor
 * @author grupo5
 * @version 1
 * @see Componente
 */
public class Motor extends Componente {

		private Carburador carburador;
		private Escape escape;
		
		private double fuerzaMax;
		private double combustEnMezcReqPFMax;
		private boolean encendido;
		
		/**
	     * Constructor de la clase 
		 * @param vidaUtil la vida util del componente
		 * @param masa la masa del componente
		 * @param precio el precio del componente
		 * @param fuerzaMax 
		 * @param combustEnMezcReqPFMax
		 */
		public Motor(double vidaUtil, double masa, double precio, 
				double fuerzaMax, double combustEnMezcReqPFMax) {
			
			super(TipoComponente.MOTOR, vidaUtil, masa, precio);
			
			this.carburador = null;
			this.fuerzaMax = fuerzaMax;
			this.combustEnMezcReqPFMax = combustEnMezcReqPFMax;
			
			this.encendido = false;
			
		}
		
		/**
	     * setCarburador 
		 * @param carburador
		 */
		public void setCarburador(Carburador carburador) {
			
			this.carburador = carburador;
			
		}
		
		/**
	     * setEscape 
		 * @param escape
		 */
		public void setEscape(Escape escape) {
		
			this.escape = escape;
			
		}
		
		/**
	     * getFuerzaMax 
		 * @return getFuerzaMax
		 */
		double getFuerzaMax () {
			
			return this.fuerzaMax;
			
		}

		/**
	     * encender 
		 */
		public void encender() {
			
			//(!)implementar
			if (super.estaOperativo()) {
				this.encendido = true;
			}
			
		}
		
		/**
	     * detener 
		 */
		public void detener() {
			
			//(!)implementar
			if (super.estaOperativo()) {
				this.encendido = false;
			}
			
		}
		
		/**
	     * estaEncendido 
		 * @return estaEncendido
		 */
		public boolean estaEncendido() {
		
			return this.encendido;
			
		}
		
		/**
	     * obtenerFuerza 
		 * @return obtenerFuerza
		 */
		double obtenerFuerza () {
			
			double cantFuerzaARet = 0;
			boolean escapeRecibeDesechos = false;
			
			if (super.estaOperativo()) {
				cantFuerzaARet = this.fuerzaMax * 
					this.carburador.obtenerMezcla() / 
					this.combustEnMezcReqPFMax;
			}
			
			escapeRecibeDesechos = 
				this.escape.recibeDesechoGaseosoCombustion();
			
			if (cantFuerzaARet == 0 || !escapeRecibeDesechos) {
				this.encendido = false;
			} else {
				super.ajustarVidaUtil(-0.001); //muy arbitrario
			}
			return cantFuerzaARet;
			
		}
		
}
